package com.eastfair.venueservice.exceptioncode;

import com.eastfair.annotation.base.LanguageTypeEnum;
import com.eastfair.core.context.ContextUtil;
import com.eastfair.core.exception.code.BaseExceptionCode;

/**
 * 场馆服务后台错误码.
 * AABBBCCC   AA(12)  系统编号   BBB 模块    CCC 具体异常
 * 模块编号
 * 展会：001
 * 服务商：002
 * 服务：003
 * 报馆：008
 * 订单:009
 * 加班:010
 * 报修:011
 * 违规记录:012
 * 保证金:014
 * 图纸记录:015
 *
 * @author dqq
 * @date 2022 /7/14
 */
public enum VenueServiceExceptionCode implements BaseExceptionCode {

    /*
     *********************展会********************
     */
    EXHIBITION_PRICE_LIST_EXIST(12001001, "该服务价目表已被其他展会绑定，请切换后重试", ""),

    EXHIBITION_NOT_EXIST(12001002, "未找到对应展会", ""),

    /**
     * 主办方在该展会手机号已注册
     */
    EXHIBITION_COMPANY_SPONSOR_PHONE_EXIST(12001020, "主办方在该展会手机号已注册", ""),


    /*
     *********************服务商********************
     */
    /**
     * 服务商注册信息已存在
     */
    SERVICE_PROVIDER_EXIST(12002001, "服务商注册信息已存在", ""),
    /**
     * 已存在申报中的服务商
     */
    REPORTING_SERVICE_PROVIDER_EXIST(12002002, "已存在申报中的服务商", ""),
    /**
     * 服务商不存在
     */
    SERVICE_PROVIDER_NOT_EXIST(12002003, "服务商不存在", ""),
    /**
     * 服务商审核记录不存在
     */
    SERVICE_PROVIDER_AUDIT_NOT_EXIST(12002004, "服务商审核记录不存在", ""),
    /**
     * 服务商审核历史不存在
     */
    SERVICE_PROVIDER_AUDIT_HISTORY_NOT_EXIST(12002005, "服务商审核历史不存在", ""),
    /**
     * 服务商类型不可为空
     */
    SERVICE_PROVIDER_TYPE_NOT_NULL(12002006, "服务商类型不可为空", ""),
    /**
     * 服务商类型错误
     */
    SERVICE_PROVIDER_TYPE_ERROR(12002007, "服务商类型错误", ""),
    /**
     * 服务商常规角色不存在
     */
    SERVICE_PROVIDER_COMMON_ROLE_NOT_EXIST(12002008, "服务商常规角色不存在", ""),
    /**
     * 服务商正在申报中，不可更改
     */
    SERVICE_PROVIDER_REPORTING_CAN_NOT_UPDATE(12002009, "服务商正在申报中，不可更改", ""),
    /**
     * 配套服务商用户绑定角色失败
     */
    COMPLEMENT_SERVICE_PROVIDER_BIND_ROLE_FAIL(12002010, "配套服务商用户绑定角色失败", ""),
    /**
     * 服务商公司名称已存在
     */
    SERVICE_PROVIDER_COMPANY_NAME_EXIST(12002011, "服务商公司名称已存在", ""),
    /**
     * 服务商统一社会信用代码已存在
     */
    SERVICE_PROVIDER_USCC_EXIST(12002012, "服务商统一社会信用代码已存在", ""),


    /*
     *********************服务********************
     */

    /**
     * 上游服务未上架
     */
    UPSTREAM_SERVICES_NOT_AVAILABLE(12003001, "上游服务未上架", ""),

    /**
     * 非下架状态不可修改
     */
    SERVICES_CANT_UPDATE(12003002, "服务上架状态不可修改", ""),

    /**
     * 处于已上架状态下不可删除
     */
    SERVICES_CANT_DELETE(12003003, "处于已上架状态下不可删除", ""),

    /**
     * 服务折扣时间不可以有交集
     */
    SERVICE_DISCOUNT_INTERSECTION_EXISTS(12003004, "服务折扣日期不可以有交集", ""),

    /**
     * 服务折扣时间不可以有交集
     */
    SERVICE_DISCOUNT_DATE_ERROR(12003005, "服务折扣开始日期不可以大于折扣日期", ""),

    /**
     * 审核服务信息为空
     */
    AUDIT_SERVICE_IS_NULL(12003006, "审核服务信息为空", ""),

    /**
     * 服务预订数量不能大于库存数量
     */
    NUM_CANT_MORE_TRAN_INVENTORY(12003007, "服务预订数量不能大于库存数量", ""),

    /**
     * 预订数量不能小于服务最小预定量限制
     */
    NUM_CANT_LESS_TRAN_MIN(12003008, "预订数量不能小于服务最小预定量限制", ""),

    /**
     * 该服务已被价目使用，且已在展会配置
     */
    SERVICES_CANT_DELETE_WITH_PRICE_LIST(12003009, "该服务在综合服务后台被价目占用，且已经与展会关联", ""),

    /**
     * 保存失败，存在未上架服务项
     */
    SERVICES_NOT_ON_SHELVES(12003010, "保存失败，存在未上架服务项", ""),

    /**
     * 服务预订数量需要大于0
     */
    BOOK_NUM_MUST_MORE_TRAN_ZERO(12003011, "服务预订数量需要大于0", ""),

    /**
     * 库存数量不足
     */
    INSUFFICIENT_INVENTORY(12003012, "库存数量不足", ""),

    /**
     * 已支付状态不可取消
     */
    HAS_PAY_STATE_CANT_CANCEL(12003013, "已支付状态不可取消", ""),

    /**
     * 该分类下存在已上架的服务，不可删除
     */
    SERVICES_CATEGORY_CANT_DELETE(12003014, "该分类下存在已上架的服务，不可删除", ""),

    /**
     * 该分类下存在已上架的服务，不可删除规格
     */
    SERVICES_CATEGORY_SPECS_CANT_DELETE(12003015, "该分类下存在已上架的服务，不可删除规格", ""),

    /**
     * 入库后库存数量超出最大库存量限制（99999999）
     */
    INVENTORY_NUM_MORE_THAN_99999999(12003016, "入库后库存数量超出最大库存量限制（99999999）", ""),

    /*
     *********************服务分类名********************
     */
    /**
     * 服务分类名称已存在
     */
    SERVICE_CATEGORY_EXISTENCE(12005001, "服务分类名称已存在", ""),


    /*
     *****************************************
     */
    NOT_ROLE_MENU_NULL(12006001, "角色菜单不能为空", ""),

    /*
     *********************价目********************
     */
    /**
     * 价目已被展会绑定
     */
    PRICE_LIST_CANT_DELETE(12007001, "价目已被展会绑定", ""),

    /*
     *********************报馆********************
     */
    /**
     * 已经审核通过，不可再审核
     */
    REPORT_VENUE_SPACE_CAN_NOT_AUDIT(12008001, "已经审核通过，不可再审核", ""),
    /**
     * 图纸审核记录不存在
     */
    VENUE_DRAWING_CATEGORY_AUDIT_NOT_EXIST(12008002, "图纸审核记录不存在", ""),

    /**
     * 图纸无需审核.
     */
    DRAWING_CATEGORY_NOT_NEED_AUDIT(12008003, "图纸无需审核", ""),



    /*
     *********************订单********************
     */
    /**
     * 订单无法生成.
     */
    ORDER_CAN_NOT_CREATE(12009001, "订单无法生成", ""),
    /**
     * 订单无法提交.
     */
    ORDER_CAN_NOT_SUBMIT(12009002, "订单无法提交", ""),
    /**
     * 订单无法取消.
     */
    ORDER_CAN_NOT_CANCEL(12009003, "订单无法取消", ""),
    /**
     * 订单不存在.
     */
    ORDER_NOT_EXIST(12009004, "订单不存在", ""),
    /**
     * 订单已存在不可删除关联数据
     */
    ORDER_EXIST_CAN_NOT_DELETE(12009005, "订单已存在不可删除关联数据", ""),
    /**
     * 订单已取消
     */
    ORDER_HAS_CANCEL(12009006, "订单已取消", ""),

    /**
     * 订单支付失败.
     */
    ORDER_PAY_ERROR(12009007, "订单支付失败", ""),

    /**
     * 报修单不可生成报修订单.
     */
    REPAIR_CAN_NOT_CREATE_ORDER(12009008, "报修单不可生成报修订单", ""),

    /**
     * 管理费订单已存在
     */
    MANAGE_ORDER_HAS_EXIST(12009009, "管理费订单已存在", ""),

    /**
     * 加班申请不存在.
     */
    /*
     *********************加班********************
     */
    /**
     * 加班申请不存在
     */
    WORK_OVERTIME_NOT_EXIST(12010001, "加班申请不存在", ""),
    /**
     * 加班申请无法提交.
     */
    WORK_OVERTIME_CAN_NOT_SUBMIT(12010002, "加班申请无法提交", ""),
    /**
     * 加班申请无法取消.
     */
    WORK_OVERTIME_CAN_NOT_CANCEL(12010003, "加班申请无法取消", ""),
    /**
     * 加班申请无法审核
     */
    WORK_OVERTIME_CAN_NOT_AUDIT(12010004, "加班申请无法审核", ""),
    /**
     * 加班申请无法删除
     */
    WORK_OVERTIME_CAN_NOT_DELETE(12010005, "加班申请无法删除", ""),
    /**
     * 加班规则已存在
     */
    WORK_OVERTIME_CONFIG_HAS_EXIST(12010006, "加班规则已存在", ""),

    /**
     * 场馆未配置展位类型加班规则
     */
    VENUE_NOT_CONFIG_RULE(12010007, "场馆未配置展位类型加班规则", ""),

    /*
     *********************报修********************
     */
    /**
     * 报修申请不存在
     */
    REPAIR_REPORT_NOT_EXIST(12011001, "报修申请不存在", ""),
    /**
     * 报修申请无法检测
     */
    REPAIR_REPORT_CAN_NOT_CHECK(12011002, "报修申请无法检测", ""),
    /**
     * 报修申请无法取消
     */
    REPAIR_REPORT_CAN_NOT_CANCEL(12011003, "报修申请无法取消", ""),
    /**
     * 报修申请已经取消.
     */
    REPAIR_REPORT_HAS_CANCEL(12011004, "报修申请已经取消", ""),
    /**
     * 报修申请无法报馆
     */
    REPAIR_REPORT_CAN_NOT_REPORT_VENUE(12011005, "报修申请无法报馆", ""),
    /**
     * 报修申请无法完结
     */
    REPAIR_REPORT_CAN_NOT_FINISH(12011006, "报修申请无法完结", ""),


    /*
     *********************违规记录********************
     */
    VIOLATION_RECORD_NOT_EXIST(12012001, "违规记录不存在", ""),

    /**
     * 支付金额不能为空或0
     */
    PAY_AMOUNT_CAN_NOT_BE_ZERO(12013001, "支付金额不能为空或0", ""),
    /**
     * 实际支付金额已超过应支付金额
     */
    ACTUAL_PAY_AMOUNT_GT_SHOULD_PAY_AMOUNT(12013002, "实际支付金额已超过应支付金额", ""),

    /*
     *********************保证金********************
     */
    BOND_MANAGE_NOT_EXIST(12014001, "保证金记录不存在", ""),

    /**
     * 保证金订单已存在
     */
    BOND_MANAGE_HAS_EXIST(12014002, "保证金订单已存在", ""),
    /**
     * 未找到收款方
     */
    PAYEE_NOT_EXIST(18007000, "未找到收款方", ""),

    /**
     * 收款方在支付系统未配置.
     */
    PAYEE_NOT_CONFIG(18007001, "收款方在支付系统未配置", ""),

    /*
     *********************图纸记录********************
     */

    /**
     * 图纸审核记录不存在
     */
    HOME_BUILDER_DRAWING_CATEGORY_AUDIT_NOT_EXIST(12015001, "图纸审核记录不存在", ""),

    /*
     *********************结算记录********************
     */

    /**
     * 展会已申请结算，不能再执行该操作
     */
    SETTLEMENT_REQUESTED(12016001, "展会已申请结算，不能再执行该操作", ""),

    /**
     * 展会已结算，不能再执行该操作
     */
    SETTLEMENT_HAS_SETTLE(12016002, "展会已结算，不能再执行该操作", ""),
    ;

    private final int code;
    /**
     * 中文消息
     */
    private String msg;
    /**
     * 英文消息
     */
    private String enMsg;

    VenueServiceExceptionCode(int code, String msg, String enMsg) {
        this.code = code;
        this.msg = msg;
        this.enMsg = enMsg;
    }

    @Override
    public int getCode() {
        return code;
    }

    @Override
    public String getMsg() {
        //中英文切换
        if (LanguageTypeEnum.CN.name().equals(ContextUtil.getLanguageType())) {
            //中文
            return msg;
        } else if (LanguageTypeEnum.EN.name().equals(ContextUtil.getLanguageType())) {
            //英文
            return enMsg;
        }
        return msg;
    }


    /**
     * Build venue booking exception code.
     *
     * @param msg   the msg
     * @param param the param
     * @return the venue booking exception code
     */
    public VenueServiceExceptionCode build(String msg, Object... param) {
        this.msg = String.format(msg, param);
        return this;
    }

    /**
     * Param venue booking exception code.
     *
     * @param param the param
     * @return the venue booking exception code
     */
    public VenueServiceExceptionCode param(Object... param) {
        msg = String.format(msg, param);
        return this;
    }
}